package w83b.w83bOperacionesPaso.w83bActas;

import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.json.JSONObject;

import w83b.w83bBeans.W83bActasBean;
import w83b.w83bBeans.W83bListaDelegadosBean;
import w83b.w83bBeans.W83bListaDiferenciasBean;
import w83b.w83bBeans.W83bListaEscrutiniosBean;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

// TODO: Auto-generated Javadoc
/**
 * The Class W83bTablaAgrupacionesOP.java.
 *
 * @author Deusto Sistemas
 */
public class W83bAnyadirDelegadoOPAction extends Q70ActionPasoOP{

	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		final JSONObject jsonObject = new JSONObject();
		jsonObject.put("posible", "si");
		if(request.getParameter("accion").equals("anyadir")){
			if(contexto.get("w83bdelegadosEscrutinioDiferencia")!=null&&!((HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia")).isEmpty()){
				HashMap delegadosEscrutinioDiferencia=(HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia");
				/*String colegio="0";
				if(!request.getParameter("colegio").equals("T")){
					colegio="1";
				}*/
				String clave=request.getParameter("colegio")+"#"+request.getParameter("sexo")+"#"+request.getParameter("sindicato");
				if(contexto.get("w83bdelegadosDelegado")!=null){
					HashMap delegadosDelegado=(HashMap)contexto.get("w83bdelegadosDelegado");
					int del=0;
					if(delegadosDelegado.get(clave)!=null){
						del=Integer.parseInt((String)delegadosDelegado.get(clave));
					}
					if(delegadosEscrutinioDiferencia.get(clave)==null){
						jsonObject.put("posible", "no");
					}
					else{
						int max=Integer.parseInt((String)delegadosEscrutinioDiferencia.get(clave));
						if((del+1)>max){
							jsonObject.put("posible", "no");
						}
					}
					
				}
			}
			else{
				jsonObject.put("posible", "no");
			}
			
		}
		else if(request.getParameter("accion").equals("editar")){
			String claveAnterior=request.getParameter("delAnterior");
			HashMap delegados=(HashMap)contexto.get("w83bListaDelegados");
			String fechaBaja = request.getParameter("fechaBaja");
			W83bListaDelegadosBean delegado=(W83bListaDelegadosBean)delegados.get(request.getParameter("dniAnterior"));//antes estaba dni
			
			if(!delegado.getSindicato().equals(request.getParameter("sindicato"))||!delegado.getCodColegio().equals(request.getParameter("colegio"))
					||!delegado.getSexo().equals(request.getParameter("sexo")))
			{
				if(contexto.get("w83bdelegadosEscrutinioDiferencia")!=null&&!((HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia")).isEmpty()){
					HashMap delegadosEscrutinioDiferencia=(HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia");
					/*String colegio="0";
					if(!request.getParameter("colegio").equals("T")){
						colegio="1";
					}*/
					String clave=request.getParameter("colegio")+"#"+request.getParameter("sexo")+"#"+request.getParameter("sindicato");
					if(contexto.get("w83bdelegadosDelegado")!=null){
						//borramos el delegado anterior
						HashMap delegadosDelegado=(HashMap)((HashMap)contexto.get("w83bdelegadosDelegado")).clone();
						int del=0;
						
						if(StringUtils.isNotEmpty((String)delegadosDelegado.get(claveAnterior))){
							del = Integer.parseInt((String)delegadosDelegado.get(claveAnterior));
						}
						
						if(!(StringUtils.isEmpty(fechaBaja)&&
								StringUtils.isNotEmpty(delegado.getFechaBaja()))){						
							if(del>0){
								del--;
								delegadosDelegado.put(claveAnterior, String.valueOf(del));
							}
							else{
								delegadosDelegado.remove(claveAnterior);
							}
							del=0;
						}
						//buscamos el numero de delegados de la nueva clave
						if(delegadosDelegado.get(clave)!=null){
							del=Integer.parseInt((String)delegadosDelegado.get(clave));
						}else{
							del = 0;
						}
						if(delegadosEscrutinioDiferencia.get(clave)==null){
							jsonObject.put("posible", "no");
						}
						else{
							int max=Integer.parseInt((String)delegadosEscrutinioDiferencia.get(clave));
							if((del+1)>max){
								jsonObject.put("posible", "no");
							}
						}
					}
				}
				else{
					jsonObject.put("posible", "no");
				}
			}
			
			
		}
		
		else if(request.getParameter("accion").equals("eliminarEscrutinio")){
			int hombresBorrados=0;
			int mujeresBorradas=0;
			Collection c;
			Iterator it;
			int hombres=0;
			int mujeres=0;
			int hombresTotales=0;
			int mujeresTotales=0;
			int hombresNuevo=0;
			int mujeresNuevo=0;
			//borramos los delegados de escrutinio
			if(contexto.get("w83bdelegadosEscrutinioDiferencia")!=null&&!((HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia")).isEmpty()){
				HashMap escrDif=(HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia");
				contexto.set("w83bListaEscrutiniosC1Borrados",(HashMap)contexto.get("w83bListaEscrutiniosC1"));
				if(contexto.get("w83bListaEscrutiniosC1")!=null&&!((HashMap)contexto.get("w83bListaEscrutiniosC1")).isEmpty()){
					HashMap escrutiniosBorrar=(HashMap)contexto.get("w83bListaEscrutiniosC1");
					c=escrutiniosBorrar.values();
					it=c.iterator();
					while(it.hasNext()){
						W83bListaEscrutiniosBean escrutinio=(W83bListaEscrutiniosBean)it.next();
						String claveV="0#H#"+escrutinio.getSindicato();
						hombres=Integer.parseInt(escrutinio.getHombres());
						hombresBorrados=hombresBorrados+hombres;
						String claveM="0#M#"+escrutinio.getSindicato();
						mujeres=Integer.parseInt(escrutinio.getMujeres());
						mujeresBorradas=mujeresBorradas+mujeres;
						hombresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveV))){
							hombresTotales=Integer.parseInt((String)escrDif.get(claveV));
						}
						mujeresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveM))){
							mujeresTotales=Integer.parseInt((String)escrDif.get(claveM));
						}
						hombresNuevo=hombresTotales-hombres;
						mujeresNuevo=mujeresTotales-mujeres;
						escrDif.put(claveV, String.valueOf(hombresNuevo));
						escrDif.put(claveM, String.valueOf(mujeresNuevo));
					}
				}
				if(contexto.get("w83bListaEscrutiniosC2")!=null&&!((HashMap)contexto.get("w83bListaEscrutiniosC2")).isEmpty()){
					HashMap escrutiniosBorrar=(HashMap)contexto.get("w83bListaEscrutiniosC2");
					contexto.set("w83bListaEscrutiniosC2Borrados",escrutiniosBorrar);
					c=escrutiniosBorrar.values();
					it=c.iterator();
					while(it.hasNext()){
						W83bListaEscrutiniosBean escrutinio=(W83bListaEscrutiniosBean)it.next();
						String claveV="1#H#"+escrutinio.getSindicato();
						hombres=Integer.parseInt(escrutinio.getHombres());
						hombresBorrados=hombresBorrados+hombres;
						String claveM="1#M#"+escrutinio.getSindicato();
						mujeres=Integer.parseInt(escrutinio.getMujeres());
						mujeresBorradas=mujeresBorradas+mujeres;
						hombresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveV))){
							hombresTotales=Integer.parseInt((String)escrDif.get(claveV));
						}
						mujeresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveM))){
							mujeresTotales=Integer.parseInt((String)escrDif.get(claveM));
						}
						hombresNuevo=hombresTotales-hombres;
						mujeresNuevo=mujeresTotales-mujeres;
						escrDif.put(claveV, String.valueOf(hombresNuevo));
						escrDif.put(claveM, String.valueOf(mujeresNuevo));
					}
				}
				contexto.set("w83bdelegadosEscrutinioDiferencia",escrDif);
			}
			
			//borramos la lista de escrutinios de los dos colegios
			contexto.set("w83bListaEscrutiniosC1",new HashMap());
			contexto.set("w83bListaEscrutiniosC2",new HashMap());
			jsonObject.put("hombresBorrados", hombresBorrados);
			jsonObject.put("mujeresBorradas", mujeresBorradas);
		}
		else if(request.getParameter("accion").equals("eliminarDiferencia")){
			int hombresBorrados=0;
			int mujeresBorradas=0;
			Collection c;
			Iterator it;
			int hombres=0;
			int mujeres=0;
			int hombresTotales=0;
			int mujeresTotales=0;
			int hombresNuevo=0;
			int mujeresNuevo=0;
			//borramos los delegados de diferencia
			if(contexto.get("w83bdelegadosEscrutinioDiferencia")!=null&&!((HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia")).isEmpty()){
				HashMap escrDif=(HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia");
				contexto.set("w83bListaDiferenciasC1Borrados",(HashMap)contexto.get("w83bListaDiferenciasC1"));
				if(contexto.get("w83bListaDiferenciasC1")!=null&&!((HashMap)contexto.get("w83bListaDiferenciasC1")).isEmpty()){
					HashMap diferenciasBorrar=(HashMap)contexto.get("w83bListaDiferenciasC1");
					c=diferenciasBorrar.values();
					it=c.iterator();
					while(it.hasNext()){
						W83bListaDiferenciasBean diferencia=(W83bListaDiferenciasBean)it.next();
						String claveV="0#H#"+diferencia.getSindicato();
						hombres=Integer.parseInt(diferencia.getHombres());
						hombresBorrados=hombresBorrados+hombres;
						String claveM="0#M#"+diferencia.getSindicato();
						mujeres=Integer.parseInt(diferencia.getMujeres());
						mujeresBorradas=mujeresBorradas+mujeres;
						hombresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveV))){
							hombresTotales=Integer.parseInt((String)escrDif.get(claveV));
						}
						mujeresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveM))){
							mujeresTotales=Integer.parseInt((String)escrDif.get(claveM));
						}
						hombresNuevo=hombresTotales-hombres;
						mujeresNuevo=mujeresTotales-mujeres;
						escrDif.put(claveV, String.valueOf(hombresNuevo));
						escrDif.put(claveM, String.valueOf(mujeresNuevo));
					}
				}
				if(contexto.get("w83bListaDiferenciasC2")!=null&&!((HashMap)contexto.get("w83bListaDiferenciasC2")).isEmpty()){
					HashMap diferenciasBorrar=(HashMap)contexto.get("w83bListaDiferenciasC2");
					contexto.set("w83bListaDiferenciasC2Borrados",diferenciasBorrar);
					c=diferenciasBorrar.values();
					it=c.iterator();
					while(it.hasNext()){
						W83bListaDiferenciasBean diferencia=(W83bListaDiferenciasBean)it.next();
						String claveV="1#H#"+diferencia.getSindicato();
						hombres=Integer.parseInt(diferencia.getHombres());
						hombresBorrados=hombresBorrados+hombres;
						String claveM="1#M#"+diferencia.getSindicato();
						mujeres=Integer.parseInt(diferencia.getMujeres());
						mujeresBorradas=mujeresBorradas+mujeres;
						hombresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveV))){
							hombresTotales=Integer.parseInt((String)escrDif.get(claveV));
						}
						mujeresTotales=0;
						if(StringUtils.isNotEmpty((String)escrDif.get(claveM))){
							mujeresTotales=Integer.parseInt((String)escrDif.get(claveM));
						}
						hombresNuevo=hombresTotales-hombres;
						mujeresNuevo=mujeresTotales-mujeres;
						escrDif.put(claveV, String.valueOf(hombresNuevo));
						escrDif.put(claveM, String.valueOf(mujeresNuevo));
					}
				}
				contexto.set("w83bdelegadosEscrutinioDiferencia",escrDif);
			}
			//borramos la lista de escrutinios de los dos colegios
			contexto.set("w83bListaDiferenciasC1",new HashMap());
			contexto.set("w83bListaDiferenciasC2",new HashMap());
			jsonObject.put("hombresBorrados", hombresBorrados);
			jsonObject.put("mujeresBorradas", mujeresBorradas);
			
		}
		else if(request.getParameter("accion").equals("eliminarDelegado")){
			
			contexto.set("w83bdelegadosDelegado",new HashMap());
			contexto.set("w83bListaDelegados",new HashMap());
		}
		else if(request.getParameter("accion").equals("eliminarDocsAdjuntos")){
			//borramos los documentos adjuntos, que estan en el acta
			W83bActasBean acta=(W83bActasBean)contexto.get("w83bNuevaActaBean");
			acta.setListaDocs(null);
			contexto.set("w83bNuevaActaBean",acta);
		}else if(request.getParameter("accion").equals("validarDelegadosEscrDifDelegados")){
			if(contexto.get("w83bdelegadosEscrutinioDiferencia")!=null&&!((HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia")).isEmpty()){
				HashMap  delegadosEscrutinioDiferencia=(HashMap)contexto.get("w83bdelegadosEscrutinioDiferencia");
				if(contexto.get("w83bdelegadosDelegado")!=null&&!((HashMap)contexto.get("w83bdelegadosDelegado")).isEmpty()){
					HashMap  delegadosDelegado=(HashMap)contexto.get("w83bdelegadosDelegado");
					Collection c=delegadosEscrutinioDiferencia.keySet();
					Iterator itr=c.iterator();
					while(itr.hasNext()){
						String clave=(String)itr.next();
						int valorEscr=Integer.parseInt((String)delegadosEscrutinioDiferencia.get(clave));
						if(valorEscr!=0){
							if(delegadosDelegado.get(clave)!=null){
								int valorDel=Integer.parseInt((String)delegadosDelegado.get(clave));
								if(valorEscr==valorDel){//puede ser que haya mas en escrutinio o diferencias que en delegados, pero no al reves
									jsonObject.put("actaValida", "si");
									response.setContentType("text/javascript;charset=iso-8859-1");
									response.setHeader("Pragma", "cache");
									response.setHeader("Expires", "0");
									response.setHeader("Cache-Control", "private");
									response.setStatus(HttpServletResponse.SC_OK);
									PrintWriter out = response.getWriter();
									out.print(jsonObject.toString());
									out.flush();
									return null;
								}else{
									jsonObject.put("actaValida", "no");
									response.setContentType("text/javascript;charset=iso-8859-1");
									response.setHeader("Pragma", "cache");
									response.setHeader("Expires", "0");
									response.setHeader("Cache-Control", "private");
									response.setStatus(HttpServletResponse.SC_OK);
									PrintWriter out = response.getWriter();
									out.print(jsonObject.toString());
									out.flush();
									return null;										
								}
							}else{
								jsonObject.put("actaValida", "no");
								response.setContentType("text/javascript;charset=iso-8859-1");
								response.setHeader("Pragma", "cache");
								response.setHeader("Expires", "0");
								response.setHeader("Cache-Control", "private");
								response.setStatus(HttpServletResponse.SC_OK);
								PrintWriter out = response.getWriter();
								out.print(jsonObject.toString());
								out.flush();
								return null;
								
							}
							//else==>si puede haber delegados en escrutinio y diferencia que no esten en delegados
							}
						}
					}
				}
		}
		response.setContentType("text/javascript;charset=iso-8859-1");
		response.setHeader("Pragma", "cache");
		response.setHeader("Expires", "0");
		response.setHeader("Cache-Control", "private");
		response.setStatus(HttpServletResponse.SC_OK);
		PrintWriter out = response.getWriter();
		out.print(jsonObject.toString());
		out.flush();
		
		return null;
	}

}
